package Servicios;

import java.util.List;
import java.util.Vector;

import Negocio.Cliente;
import Negocio.CuentaCorriente;
import Persistencia.IRepository;
import Persistencia.QueryParameter;
import Persistencia.Repository;
import Persistencia.RepositoryException;



public class ServicioCuentasCorrientes {
	private IRepository<CuentaCorriente> repositorioCuentaCorrientes;
	private static ServicioCuentasCorrientes instance = null;
	
	private ServicioCuentasCorrientes() {
		this.repositorioCuentaCorrientes = new Repository<CuentaCorriente>();
	}
	
	public static ServicioCuentasCorrientes getInstance() {
		if (instance == null) {
			instance = new ServicioCuentasCorrientes();
		}
		return instance;
	}
	
	public CuentaCorriente getCuentaCorrienta(int cuentaCorrienteId) throws RepositoryException {
		String queryExpression = "from CuentaCorriente c where c.cuentaCorrienteId = :cuentaCorrienteId";
		QueryParameter parameter = new QueryParameter("cuentaCorrienteId", cuentaCorrienteId);
		CuentaCorriente cc= this.repositorioCuentaCorrientes.get(queryExpression, parameter);
		
		return cc;
	}
	
	
	public List<CuentaCorriente> getCuentaCorrientes() throws ServiceException {
		List<CuentaCorriente> cuentaCorrientes;
		
		try {
			cuentaCorrientes = this.repositorioCuentaCorrientes.getAll(CuentaCorriente.class);
		} catch (RepositoryException e) {
			throw new ServiceException(e);
		}	
		
		List<CuentaCorriente> result = new Vector<CuentaCorriente>();
		
		for(CuentaCorriente cuentaCorriente : cuentaCorrientes) {
			result.add(cuentaCorriente);
		}
		
		return result;
	}

	public void guardarOActualizar(CuentaCorriente cuentaCorriente) throws ServiceException {
		try {
			this.repositorioCuentaCorrientes.saveOrUpdate(cuentaCorriente);
		} catch (RepositoryException e) {
			throw new ServiceException(e);
		}
	}

	
	
	
}
